/*
 * Use local definitions of C library macros and functions
 * NOTE: The function implementations may not be as efficient
 * as an inline or assembly code implementation provided by a
 * native C library.
 */

#include "types.h"

#ifndef va_arg

#ifndef _VALIST
#define _VALIST
typedef char *vs_va_list;
#endif /* _VALIST */

/*
 * Storage alignment properties
 */
#define NATIVE_INT int
#define _AUPBND (sizeof(NATIVE_INT) - 1)
#define _ADNBND (sizeof(NATIVE_INT) - 1)

/*
 * Variable argument list macro definitions
 */

#define _bnd(X, bnd) (((sizeof(X)) + (bnd)) & (~(bnd)))
#define va_arg(ap, T) (*(T *)(((ap) += (_bnd(T, _AUPBND))) - (_bnd(T, _ADNBND))))
#define va_end(ap) (void)0
#define va_start(ap, A) (void)((ap) = (((char *)&(A)) + (_bnd(A, _AUPBND))))

#endif /* va_arg */

unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base);
long simple_strtol(const char *cp, char **endp, unsigned int base);
unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base);
long long simple_strtoll(const char *cp, char **endp, unsigned int base);
//static int  skip_atoi(const char **s);
//char * number(char * buf, char * end, long long num, int base, int size, int precision, int type);
int vsnprintf(char *buf, size_t size, const char *fmt, vs_va_list args);
int snprintf(char *buf, size_t size, const char *fmt, ...);
int vsprintf(char *buf, const char *fmt, vs_va_list args);
int sprintf(char *buf, const char *fmt, ...);
int vsscanf(const char *buf, const char *fmt, vs_va_list args);
int sscanf(const char *buf, const char *fmt, ...);
